

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<script type="text/javascript" src="helpman_topicinit.js"></script>

<title>Choice [Enterprise Architect User Guide]</title>

<meta name="keywords" content="Enterprise Architect, Sparx Systems, UML, Element,Element Choice,Choice,Choice Element">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="Content-Style-Type" content="text/css" />

<link type="text/css" href="default.css" rel="stylesheet" />
<style type="text/css">
  A, A:Visited
  {
    color: #00F;
  }

  A:Active, A:Hover
  {
    color: #F00;
  }

  OL
  {
    margin: 5px 0 5px 48px;
  }

  UL
  {
    margin-bottom: 3px;
    margin-top: 0;
  }

  #nsr
  {
    background-color: #D4DFFF;
  }

  #nsr A
  {
    text-decoration: none;
  }

  #mainbody
  {
    padding: 8px;
  }

  .p_BodyText
  {
    padding: 5px 0;
  }
</style>



<style type="text/css" media="screen">
  BODY
  {
    background-color: #FFFFFF;
  }

  #nsr
  {
    padding: 6px 6px 0 6px;
    border-bottom: none;
    vertical-align: top;
    z-index: 2;
    visibility: visible;
    left: 0;
    top: 0;
    position: absolute;
  }

  #mainbody
  {
    left: 0;
    top: 0;
    margin: 0;
    position: absolute;
    padding: 10px;
    overflow: auto;
    height: 100%;
    z-index: 1;
    background-repeat: no-repeat;
    background-position: bottom right;
    background-attachment: fixed;
  }
</style>

<style type="text/css" media="print">
  #nsr
  {
    visibility: none;
  }

  #mainbody
  {
    overflow: visible;
  }
</style>
<script type="text/javascript" language="JavaScript" src="nonscroll.js"></script>

</head>
<body scroll="no">

<div id="page">



        <div id="content">
          <div id="content-inner">
          



  
          <div id="nsr">
            <table border="0" cellspacing="0" cellpadding="4" width="100%">
              <tr valign="top">
                <td align="left">
  


                  <p class="p_Heading1"><span class="f_Heading1">Choice</span></p>



  
                </td>
                <td align="right">
                  <a href="introduction.htm" onmouseover="document.images.main.src='button_main_h.gif'" onmouseout="document.images.main.src='button_main.gif'">
                    <img name="main" src="button_main.gif" border=0 alt="Return to Introduction">
                  </a>&nbsp;
    
                  <a href="central_buffer_node.htm" onmouseover="document.images.prev.src='button_prev_h.gif'" onmouseout="document.images.prev.src='button_prev.gif'">
                    <img name=prev src="button_prev.gif" border=0 alt="Previous page" />
                  </a>&nbsp;
    
    
    
                  <a href="fragment.htm" onmouseover="document.images.next.src='button_next_h.gif'" onmouseout="document.images.next.src='button_next.gif'">
                    <img name=next src="button_next.gif" border=0 alt="Next page" />
                  </a>
    
    
                </td>
              </tr>
            </table>
          </div>
          <div id="mainbody">
  


                <p class="p_TextIndentedL2"><img src="d_choice.png" width="61" height="79" border="0" alt="d_Choice"></p>
<p class="p_BodyText"><span class="f_BodyText">The </span><span class="f_BodyText" style="font-style: italic;">Choice</span><span class="f_BodyText"> </span><span class="f_BodyText" style="font-style: italic;"><a href="pseudo_states.htm">pseudo-state</a></span><span class="f_BodyText"> is used to compose complex transitional paths in, for example, a <a href="statediagram.htm">State Machine diagram</a>, where the outgoing transition path is decided by dynamic, run-time conditions. The run-time conditions are determined by the actions performed by the <a href="state.htm">State Machine</a> on the path leading to the choice.</span></p>
<p class="p_BodyText"><span class="f_BodyText">The following example depicts the Choice element. Upon reaching the </span><span class="f_BodyText" style="font-style: italic;">Filter</span><span class="f_BodyText"> pseudo-state, a transition fires to the appropriate state based on the run-time value passed to the Filter. Very similar in form to a </span><span class="f_BodyText" style="font-style: italic;"><a href="junction.htm">Junction</a></span><span class="f_BodyText"> pseudo-state, the Choice pseudo-state's distinction is in deciding transition paths at run-time.</span></p>
<p class="p_TextIndentedL2"><img src="state%20--%20choice.png" width="390" height="382" border="0" alt="state -- choice"></p>
<p class="p_SubHeadingL1"><span class="f_SubHeadingL1">Toolbox Icon</span></p>
<p class="p_TextIndentedL2"><img src="e_choice.png" width="169" height="20" border="0" alt="e_Choice"></p>
<p class="p_SubHeadingL1"><span class="f_SubHeadingL1">OMG UML Specification</span></p>
<p class="p_BodyText"><span class="f_BodyText">The OMG UML specification (</span><span class="f_BodyText" style="font-style: italic;">UML Superstructure Specification, v2.1.1, p. 538</span><span class="f_BodyText">) states:</span></p>
<p class="p_OMGText"><span class="f_OMGText">...choice vertices which, when reached, result in the dynamic evaluation of the guards of the triggers of its outgoing transitions. This realizes a dynamic conditional branch. It enables splitting of transitions into multiple outgoing paths such that the decision on which path to take may be a function of the results of prior actions performed in the same run-to-completion step. If more than one of the guards evaluates to true, an arbitrary one is selected. If none of the guards evaluates to true, then the model is considered ill-formed. (To avoid this, it is recommended to define one outgoing transition with the predefined &quot;else&quot; guard for every choice vertex.) Choice vertices should be distinguished from static branch points that are based on junction points.</span></p>




            </div>
          </div>
        </div>



</div>


</body>
</html>
